package it.traveldream.ManagedBeans;

import it.traveldream.EJB.SBEJBBean;
import it.traveldream.EJB.DTO.AlloggioDTO;
import it.traveldream.EJB.DTO.DisponibilitaDTO;
import it.traveldream.EJB.DTO.PacchettoDTO;
import it.traveldream.EJB.DTO.TrasportoSingoloDTO;
import it.traveldream.EJB.utilities.Utility;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Iterator;
import java.util.List;

import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;

import org.primefaces.event.TabChangeEvent;

@ManagedBean(name="alloggioBean")
@SessionScoped
public class AlloggioBean {


	//Dati degli Alloggi

	private AlloggioDTO newAlloggio;

	private AlloggioDTO alloggioSelezionato;


	private AlloggioDTO datiFiltro;

	private ArrayList<AlloggioDTO> listaAlloggi;
	private ArrayList<AlloggioDTO> listaAlloggiFiltrati;

	//Dati disponibilita
	private String tipoCamera;

	private Date dataInizioDisp, dataFineDisp;

	private double prezzoDisp;
	private int numeroCamere;

	private ArrayList<DisponibilitaDTO> disponibilitaAlloggioSel;



	//Lista delle disponibilita delle diverse camere per un alloggio
	//(Utilizzata nella creazione di un nuovo pacchetto)
	private ArrayList<DisponibilitaDTO> disponibilitaAlloggio;


	//Variabile necessaria per accedere ai dati del nuovo pacchetto che si vuole inserire
	@ManagedProperty(value="#{pacchettoBean}")
	private PacketBean packBean;


	@EJB
	private SBEJBBean sbEJB;


	public AlloggioBean(){

		datiFiltro = new AlloggioDTO();
		listaAlloggi = new ArrayList<AlloggioDTO>();
		listaAlloggiFiltrati = new ArrayList<AlloggioDTO>();
		dataInizioDisp = new Date();
		tipoCamera = "Singola";
		numeroCamere = 0;
		prezzoDisp = 0;
		newAlloggio = new AlloggioDTO();
		disponibilitaAlloggio = new ArrayList<DisponibilitaDTO>();

		setDisponibilitaAlloggioSel(new ArrayList<DisponibilitaDTO>());


	}


	/**
	 * 
	 * Metodo che carica gli alloggi dal DB 		
	 */
	public void caricaAlloggi(){

		listaAlloggi.clear();
		listaAlloggi.addAll(sbEJB.getAllAlloggi());
		listaAlloggiFiltrati.clear();
		listaAlloggiFiltrati.addAll(listaAlloggi);

		HttpServletRequest origRequest = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();

		//Verifico se devo filtrare i dati in base alla citta di destinazione
		if(origRequest.getServletPath().contains("new_packet_alloggio")){
			this.datiFiltro.setCitta(packBean.getNuovoPacchetto().getCitta());
		}

		if(origRequest.getServletPath().contains("edit_packet_alloggio")){
			this.datiFiltro.setCitta(packBean.getPacchettoSelezionato().getCitta());
		}

		filtraAlloggi();
		System.out.print("Alloggi caricati");
	}

	//carico gli alloggi del client
	/**
	 * 
	 * Metodo che carica gli alloggi dal DB 		
	 */
	public void caricaAlloggiCustom(){

		listaAlloggi.clear();
		listaAlloggi.addAll(sbEJB.getAllAlloggi());
		listaAlloggiFiltrati.clear();
		listaAlloggiFiltrati.addAll(listaAlloggi);

		HttpServletRequest origRequest = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
		System.out.println(origRequest.getServletPath());
		//Verifico se devo filtrare i dati in base alla citta di destinazione
		if(origRequest.getServletPath().contains("new_packet_alloggio")){
			System.out.println("ho settato la città con new_.._alloggio");
		
			
			this.datiFiltro.setCitta(packBean.getNuovoPacchetto().getCitta());
		}

		if(origRequest.getServletPath().contains("create_new_packet_trasporti_ritorno")){
			System.out.println("ho settato la città con new_.._trsp");
			
			this.datiFiltro.setCitta(packBean.getNuovoPacchetto().getCitta());
		}

		filtraAlloggi();
		System.out.print("Alloggi caricati");
	}
	
	
	
	
	
	/**
	 * 
	 * Listener utilizzato da Primefaces per caricare i dati delle escursioni
	 * dal DB al momento della selezione della relativa Tab
	 * 
	 */
	public void onTabChange(TabChangeEvent event) { 
		if(event.getTab().getTitle().equalsIgnoreCase("Alloggi")){
			listaAlloggi.clear();
			listaAlloggi.addAll(sbEJB.getAllAlloggi());
			listaAlloggiFiltrati.clear();
			listaAlloggiFiltrati.addAll(listaAlloggi);
		}
		else
			System.out.println(event.getTab().getTitle());
	} 


	/**
	 * 
	 * Metodo che permette di aggiungere al db un nuovo alloggio
	 */
	public void addAlloggio(){

		System.out.println("Aggiungo l'alloggio: "+ newAlloggio.getDescrizione() + " Citta: " + newAlloggio.getCitta());

		try {
			sbEJB.insertAlloggio(newAlloggio);

			FacesContext.getCurrentInstance().addMessage("create_alloggio_growl",
					new FacesMessage( "SUCCESFULLY", "Alloggio creato correttamente"));

			newAlloggio = new AlloggioDTO();	//Elimino i dati dell'alloggio appena inserito dai fields dei form di inserimento
		} catch (Exception e) {
			FacesContext.getCurrentInstance().addMessage("create_alloggio_growl",
					new FacesMessage( "ERRORE", e.getMessage().substring(0, e.getMessage().indexOf(":"))));
			System.out.print(e.getMessage());
		}
	}


	/**
	 * 
	 * Metodo listener del click sull'alloggio dalla tabella degli alloggi
	 */

	public void onAlloggioRowSelect(){

		//carico la disponibilit�� dell'alloggioSelezionato

		//disponibilitaAlloggioSel = sbEJB.getDisponibilitaForAlloggio(alloggioSelezionato);
	}


	/**
	 * 
	 * Metodo che permette di modificare i dati di un allogggio gi�� esistente.
	 * I dati "modificati" si trovano nella variabile locale alloggioSelezionato.
	 */
	public void editAlloggio(){

		try {

			//TODO effettuare la chiamata all'EJB per effettuare la modifica su DB.
			System.out.print("Modifico alloggio in: " + alloggioSelezionato.getDescrizione() + "; citta: " +alloggioSelezionato.getCitta().getName());

			sbEJB.updateAlloggio(alloggioSelezionato);

			FacesContext.getCurrentInstance().addMessage("edit_alloggio_growl",
					new FacesMessage( "SUCCESFULLY", "Alloggio modificato correttamente"));

			//TODO Decidere se eliminare i dati del nuovo alloggio da alloggio selezionato oppure no.

		} catch (Exception e) {
			FacesContext.getCurrentInstance().addMessage("edit_alloggio_growl",
					new FacesMessage( "ERRORE", e.getMessage().substring(0, e.getMessage().indexOf(":"))));
			System.out.print(e.getMessage());
		}
	}


	public void deleteAlloggio(){
		try {

			//TODO effettuare la chiamata all'EJB per effettuare la modifica su DB.

			sbEJB.deleteAlloggio(alloggioSelezionato);
			System.out.print("Modifico alloggio in: " + alloggioSelezionato.getDescrizione() + "; citta: " +alloggioSelezionato.getCitta().getName());
			FacesContext.getCurrentInstance().addMessage("delete_alloggio_growl",
					new FacesMessage( "SUCCESFULLY", "Alloggio eliminato correttamente"));

			//TODO Decidere se eliminare i dati del nuovo alloggio da alloggio selezionato oppure no.

		} catch (Exception e) {
			FacesContext.getCurrentInstance().addMessage("delete_alloggio_growl",
					new FacesMessage( "ERRORE", e.getMessage().substring(0, e.getMessage().indexOf(":"))));
			System.out.print(e.getMessage());
		}
	}

	/**
	 * Metodo che permette di aggiungere una disponibilita all'alloggio i cui dati si trovano del 
	 * {@link AlloggioDTO} alloggioSelezionato
	 */
	public void addDisponibilita(){

		System.out.println("Aggiungo a " + alloggioSelezionato.getDescrizione() + "\n "+
				"Tipo camera: " + tipoCamera +
				"\nNumero Camere: " +  numeroCamere +
				"\nPrezzo: " + prezzoDisp
				+ "\n Data Inizio: " + Utility.date2String(dataInizioDisp) +
				"\n Data Fine: " + Utility.date2String(dataFineDisp)

				);

		try {
			sbEJB.insertAlloggio(alloggioSelezionato, dataInizioDisp, dataFineDisp, tipoCamera, numeroCamere, prezzoDisp);
			FacesContext.getCurrentInstance().addMessage("create_alloggio_growl",
					new FacesMessage( "SUCCESFULLY", "disponibilit�� aggiornata correttamente"));
		} catch (Exception e) {
			FacesContext.getCurrentInstance().addMessage("create_alloggio_growl",
					new FacesMessage( "ERRORE", e.getMessage().substring(0, e.getMessage().indexOf(":"))));
			e.printStackTrace();
		}

	}

	/**
	 * 
	 * Metodo utilizzato per filtrare gli alloggi caricati dal db.
	 * 
	 */
	public void filtraAlloggi(){

		listaAlloggiFiltrati.clear();

		if(datiFiltro.getCitta() != null){
			Iterator<AlloggioDTO> it = listaAlloggi.iterator();
			AlloggioDTO help;
			while(it.hasNext()){
				help = it.next();
				if(help.getCitta().getId() == datiFiltro.getCitta().getId())
					listaAlloggiFiltrati.add(help);
			}

		}else
			listaAlloggiFiltrati.addAll(listaAlloggi);


	}






	/**
	 * Metodo che permette di recuperare le disponibilit�� dell'alloggio presente in
	 * nuovoPacchetto, verificando che, per ogni data di soggiorno, ci sia, nell'alloggio selezionato,
	 * una quantita di camere dello stesso tipo del pacchetto sufficiente da soddisfare il numero
	 * totale di pacchetti vendibili
	 * 
	 */
	public List<DisponibilitaDTO> getDisponibilitaForNewAlloggio(){


		if(packBean.getNuovoPacchetto().getAlloggi() != null){
			System.out.println("Recupero le disponibilita per: "+packBean.getNuovoPacchetto().getAlloggi().getIdAlloggio() + 
					" " + packBean.getNuovoPacchetto().getAlloggi().getDescrizione() );

			ArrayList<DisponibilitaDTO> d  = sbEJB.getDisponibilitaForAlloggio(packBean.getNuovoPacchetto().getAlloggi());


			

			//recupero tutti gli alloggi della citta che hanno disponibilit
			disponibilitaAlloggio.clear();
			Iterator<DisponibilitaDTO> it = d.iterator();
			ArrayList<DisponibilitaDTO> listaDateOk = new ArrayList<DisponibilitaDTO>();
			DisponibilitaDTO help = new DisponibilitaDTO();


			//Filtro le disponibilita per data di interesse, tipo di camera e numero sufficiente di camere.
			while(it.hasNext()){
				help = it.next();
				if(packBean.getNuovoPacchetto().getdataPartenza().compareTo(help.getData()) <= 0
						&& packBean.getNuovoPacchetto().getdataRitorno().compareTo(help.getData()) >= 0
						&&
						//Controllo che in questa data, ci sia il tipo di camera richiesta 
						packBean.getNuovoPacchetto().getTipoCameraFromAlloggio().getTipoCamera().equalsIgnoreCase(help.getTipoCamera())
						&& 
						//controllo che in questa data ci sia la disponibilita sufficiente per la data richiesta
						packBean.getNuovoPacchetto().getDisponibilita() <= help.getNumerocamere()
						){
					listaDateOk.add(help);		//aggiungo la disponibilita a quelle di interesse
				}
			}


			GregorianCalendar gcal1 = new GregorianCalendar();
			GregorianCalendar gcal2 = new GregorianCalendar();
			gcal1.setTime(packBean.getNuovoPacchetto().getdataPartenza());
			gcal2.setTime(packBean.getNuovoPacchetto().getdataRitorno());
			gcal2.add(Calendar.DAY_OF_YEAR, 1);

			int i = 0;
			boolean isDispOk = true;

			//Per ogni data di soggiorno controllo che ci sia una disponibilita adeguata
			while(gcal1.getTime().before(gcal2.getTime()) && isDispOk){
				isDispOk = false;
				i=0;
				if(listaDateOk.size() == 0)
					return disponibilitaAlloggio;	//Se non ci sono date da controllare ritorna vuoto.

				//controllo che esista una disponibilita tra quelle filtrate prima che, per la data corrente,
				//soddisfi il numero di pacchetti vendibili
				while(listaDateOk.size() > i){
					help =listaDateOk.get(i);

					if(disponibilitaAlloggio.size()==0)
						disponibilitaAlloggio.add(help);	//aggiungo almeno una disponibilita alla lista da ritornare (serve poi per recuperare il tipo di camera dalla GUI)

					if(gcal1.getTime().compareTo(help.getData()) == 0)
					{
						System.out.println("DISPONIBILITA VERIFICATA: " +packBean.getNuovoPacchetto().getDisponibilita() + "<=" + help.getNumerocamere() +" && \n" +
								packBean.getNuovoPacchetto().getTipoCameraFromAlloggio().getTipoCamera() +" == " +help.getTipoCamera()	);
						isDispOk = true;
					}
					i++;
				}
				gcal1.add(Calendar.DAY_OF_YEAR, 1);		//passo alla prossima data
			}



			System.out.println(isDispOk + " ||||||||  " + disponibilitaAlloggio.size());

			//Se le disponibilita sono verificate, ritorno l'arraylist di 1 elemento
			if(isDispOk && disponibilitaAlloggio.size()>0){
				return disponibilitaAlloggio;

			}
		}
		System.out.print("disponibilita KO");
		ArrayList<DisponibilitaDTO> ret1 = new ArrayList<DisponibilitaDTO>();
		return ret1;
	}






	/**
	 * Metodo che permette di recuperare le disponibilit�� dell'alloggio presente in
	 * pacchettoSelezionato, verificando che, per ogni data di soggiorno, ci sia, nell'alloggio selezionato,
	 * una quantita di camere dello stesso tipo del pacchetto sufficiente da soddisfare il numero
	 * totale di pacchetti vendibili
	 * 
	 */
	public void getDisponibilitaForAlloggioSelezionato(){


		if(packBean.getPacchettoSelezionato().getAlloggi() != null){
			System.out.println("Recupero le disponibilita per: "+packBean.getPacchettoSelezionato().getAlloggi().getIdAlloggio() + 
					" " + packBean.getPacchettoSelezionato().getAlloggi().getDescrizione() );

			ArrayList<DisponibilitaDTO> d  = sbEJB.getDisponibilitaForAlloggio(packBean.getPacchettoSelezionato().getAlloggi());




			//recupero tutti gli alloggi della citta che hanno disponibilit
			disponibilitaAlloggio.clear();
			Iterator<DisponibilitaDTO> it = d.iterator();
			ArrayList<DisponibilitaDTO> listaDateOk = new ArrayList<DisponibilitaDTO>();
			DisponibilitaDTO help = new DisponibilitaDTO();


			//Filtro le disponibilita per data di interesse, tipo di camera e numero sufficiente di camere.
			while(it.hasNext()){
				help = it.next();
				if(packBean.getPacchettoSelezionato().getdataPartenza().compareTo(help.getData()) <= 0
						&& packBean.getPacchettoSelezionato().getdataRitorno().compareTo(help.getData()) >= 0
						&&
						//Controllo che in questa data, ci sia il tipo di camera richiesta 
						packBean.getPacchettoSelezionato().getTipoCameraFromAlloggio().getTipoCamera().equalsIgnoreCase(help.getTipoCamera())
						&& 
						//controllo che in questa data ci sia la disponibilita sufficiente per la data richiesta
						packBean.getPacchettoSelezionato().getDisponibilita() <= help.getNumerocamere()
						){
					listaDateOk.add(help);		//aggiungo la disponibilita a quelle di interesse
				}
			}


			GregorianCalendar gcal1 = new GregorianCalendar();
			GregorianCalendar gcal2 = new GregorianCalendar();
			gcal1.setTime(packBean.getPacchettoSelezionato().getdataPartenza());
			gcal2.setTime(packBean.getPacchettoSelezionato().getdataRitorno());
			gcal2.add(Calendar.DAY_OF_YEAR, 1);

			int i = 0;
			boolean isDispOk = true;

			//Per ogni data di soggiorno controllo che ci sia una disponibilita adeguata
			while(gcal1.getTime().before(gcal2.getTime()) && isDispOk){
				isDispOk = false;
				i=0;
				if(listaDateOk.size() == 0)
					disponibilitaAlloggioSel =  disponibilitaAlloggio;	//Se non ci sono date da controllare ritorna vuoto.

				//controllo che esista una disponibilita tra quelle filtrate prima che, per la data corrente,
				//soddisfi il numero di pacchetti vendibili
				while(listaDateOk.size() > i){
					help =listaDateOk.get(i);

					if(disponibilitaAlloggio.size()==0)
						disponibilitaAlloggio.add(help);	//aggiungo almeno una disponibilita alla lista da ritornare (serve poi per recuperare il tipo di camera dalla GUI)

					if(gcal1.getTime().compareTo(help.getData()) == 0)
					{
						System.out.println("DISPONIBILITA VERIFICATA: " +packBean.getPacchettoSelezionato().getDisponibilita() + "<=" + help.getNumerocamere() +" && \n" +
								packBean.getPacchettoSelezionato().getTipoCameraFromAlloggio().getTipoCamera() +" == " +help.getTipoCamera()	);
						isDispOk = true;
					}
					i++;
				}
				gcal1.add(Calendar.DAY_OF_YEAR, 1);		//passo alla prossima data
			}



			System.out.println(isDispOk + " ||||||||  " + disponibilitaAlloggio.size());

			//Se le disponibilita sono verificate, ritorno l'arraylist di 1 elemento
			if(isDispOk && disponibilitaAlloggio.size()>0){
				disponibilitaAlloggioSel =  disponibilitaAlloggio;
				return;
			}
		}
		System.out.print("disponibilita KO");
		disponibilitaAlloggioSel = new ArrayList<DisponibilitaDTO>();

	}


	/**
	 * Metodo utilizzato nel dettaglio alloggio per recuperare tutti le info sulle disponibilità
	 */
	public void obtainDisponibilitaForAlloggioSel(){


		if(alloggioSelezionato != null){
			System.out.println("Recupero le disponibilita per: "+alloggioSelezionato.getIdAlloggio() + 
					" " + alloggioSelezionato.getDescrizione() );

			ArrayList<DisponibilitaDTO> d  = sbEJB.getDisponibilitaForAlloggio(alloggioSelezionato);


			//recupero tutti gli alloggi della citta che hanno disponibilit
			disponibilitaAlloggio.clear();
			Iterator<DisponibilitaDTO> it = d.iterator();
			ArrayList<DisponibilitaDTO> listaDateOk = new ArrayList<DisponibilitaDTO>();
			DisponibilitaDTO help = new DisponibilitaDTO();

			/*
			//Filtro le disponibilita per data di interesse, tipo di camera e numero sufficiente di camere.
			while(it.hasNext()){
				help = it.next();
				if(packBean.getPacchettoSelezionato().getdataPartenza().compareTo(help.getData()) <= 0
						&& packBean.getPacchettoSelezionato().getdataRitorno().compareTo(help.getData()) >= 0
						&&
						//Controllo che in questa data, ci sia il tipo di camera richiesta 
						packBean.getPacchettoSelezionato().getTipoCameraFromAlloggio().getTipoCamera().equalsIgnoreCase(help.getTipoCamera())
						&& 
						//controllo che in questa data ci sia la disponibilita sufficiente per la data richiesta
						packBean.getPacchettoSelezionato().getDisponibilita() <= help.getNumerocamere()
						){
					listaDateOk.add(help);		//aggiungo la disponibilita a quelle di interesse
				}
			}


			GregorianCalendar gcal1 = new GregorianCalendar();
			GregorianCalendar gcal2 = new GregorianCalendar();
			gcal1.setTime(packBean.getPacchettoSelezionato().getdataPartenza());
			gcal2.setTime(packBean.getPacchettoSelezionato().getdataRitorno());
			gcal2.add(Calendar.DAY_OF_YEAR, 1);

			int i = 0;
			boolean isDispOk = true;

			//Per ogni data di soggiorno controllo che ci sia una disponibilita adeguata
			while(gcal1.getTime().before(gcal2.getTime()) && isDispOk){
				isDispOk = false;
				i=0;
				if(listaDateOk.size() == 0)
					disponibilitaAlloggioSel =  disponibilitaAlloggio;	//Se non ci sono date da controllare ritorna vuoto.

				//controllo che esista una disponibilita tra quelle filtrate prima che, per la data corrente,
				//soddisfi il numero di pacchetti vendibili
				while(listaDateOk.size() > i){
					help =listaDateOk.get(i);

					if(disponibilitaAlloggio.size()==0)
						disponibilitaAlloggio.add(help);	//aggiungo almeno una disponibilita alla lista da ritornare (serve poi per recuperare il tipo di camera dalla GUI)

					if(gcal1.getTime().compareTo(help.getData()) == 0)
					{
						System.out.println("DISPONIBILITA VERIFICATA: " +packBean.getPacchettoSelezionato().getDisponibilita() + "<=" + help.getNumerocamere() +" && \n" +
								packBean.getPacchettoSelezionato().getTipoCameraFromAlloggio().getTipoCamera() +" == " +help.getTipoCamera()	);
						isDispOk = true;
					}
					i++;
				}
				gcal1.add(Calendar.DAY_OF_YEAR, 1);		//passo alla prossima data
			}



			System.out.println(isDispOk + " ||||||||  " + disponibilitaAlloggio.size());

			//Se le disponibilita sono verificate, ritorno l'arraylist di 1 elemento
			if(isDispOk && disponibilitaAlloggio.size()>0){
				disponibilitaAlloggioSel =  disponibilitaAlloggio;
				return;
			}*/
			disponibilitaAlloggio.clear();
			disponibilitaAlloggio.addAll(d);
			disponibilitaAlloggioSel.clear();
			disponibilitaAlloggioSel.addAll(disponibilitaAlloggio);
			System.out.print("disponibilita: " + disponibilitaAlloggio.size());
			
		}
		//disponibilitaAlloggioSel = new ArrayList<DisponibilitaDTO>();




	}



	/**
	 * 
	 * Metodo che viene utilizzato per recuperare le info sulla camera di un certo pacchetto
	 */
	public DisponibilitaDTO getDisponibilitaForPacchettoSelezionato(){

		if(packBean.getPacchettoSelezionato() != null){
			System.out.print(packBean.getPacchettoSelezionato().getCitta());
			ArrayList<DisponibilitaDTO> allDisponibilita =
					sbEJB.getDisponibilitaForAlloggio(packBean.getPacchettoSelezionato().getAlloggi());
			DisponibilitaDTO d;
			Iterator<DisponibilitaDTO> it = allDisponibilita.iterator();
			while(it.hasNext()){
				d = it.next();
				System.out.println(packBean.getPacchettoSelezionato().getTipocamera() + " & " +d.getTipoCamera() + "  " +d.getPrezzo() + " CICLO");
				if(packBean.getPacchettoSelezionato().getdataPartenza().compareTo(d.getData()) <= 0
						&& packBean.getPacchettoSelezionato().getdataRitorno().compareTo(d.getData()) >= 0 
						&& packBean.getPacchettoSelezionato().getTipocamera() != null
						&& packBean.getPacchettoSelezionato().getTipocamera().equalsIgnoreCase(d.getTipoCamera())){
					System.out.println(d.getPrezzo() + " <--- TROVATOOO!");
					return d;
				}
			}
		}
		return null;
	}


	//Getters e setters
	public AlloggioDTO getNewAlloggio() {
		return newAlloggio;
	}


	public void setNewAlloggio(AlloggioDTO newAlloggio) {
		this.newAlloggio = newAlloggio;
	}


	public AlloggioDTO getAlloggioSelezionato() {
		return alloggioSelezionato;
	}


	public void setAlloggioSelezionato(AlloggioDTO alloggioSelezionato) {
		this.alloggioSelezionato = alloggioSelezionato;
	}


	public ArrayList<AlloggioDTO> getListaAlloggiFiltrati() {
		return listaAlloggiFiltrati;
	}


	public void setListaAlloggiFiltrati(ArrayList<AlloggioDTO> listaAlloggiFiltrati) {
		this.listaAlloggiFiltrati = listaAlloggiFiltrati;
	}


	public AlloggioDTO getDatiFiltro() {
		return datiFiltro;
	}


	public void setDatiFiltro(AlloggioDTO datiFiltro) {
		this.datiFiltro = datiFiltro;
	}


	public Date getDataInizioDisp() {
		return dataInizioDisp;
	}


	public void setDataInizioDisp(Date dataInizioDisp) {
		this.dataInizioDisp = dataInizioDisp;
	}


	public Date getDataFineDisp() {
		return dataFineDisp;
	}


	public void setDataFineDisp(Date dataFineDisp) {
		this.dataFineDisp = dataFineDisp;
	}


	public double getPrezzoDisp() {
		return prezzoDisp;
	}


	public void setPrezzoDisp(double prezzoDisp) {
		this.prezzoDisp = prezzoDisp;
	}


	public int getNumeroCamere() {
		return numeroCamere;
	}


	public void setNumeroCamere(int numeroCamere) {
		this.numeroCamere = numeroCamere;
	}


	public void setTipoCamera(String tipo) {
		this.tipoCamera = tipo ;
	}

	public String getTipoCamera() {
		return this.tipoCamera;
	}


	public ArrayList<DisponibilitaDTO> getDisponibilitaAlloggioSel() {
		return disponibilitaAlloggioSel;
	}


	public void setDisponibilitaAlloggioSel(ArrayList<DisponibilitaDTO> disponibilitaAlloggioSel) {
		this.disponibilitaAlloggioSel = disponibilitaAlloggioSel;
	}


	public PacketBean getPackBean() {
		return packBean;
	}


	public void setPackBean(PacketBean packBean) {
		this.packBean = packBean;
	}


	public ArrayList<DisponibilitaDTO> getDisponibilitaAlloggio() {
		return disponibilitaAlloggio;
	}


	public void setDisponibilitaAlloggio(
			ArrayList<DisponibilitaDTO> disponibilitaAlloggio) {
		this.disponibilitaAlloggio = disponibilitaAlloggio;
	}

}
